package com.boy.commonutils.config;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

/**
 * @author whd
 * @date 2024/06/07 16:36:43
 */

@Component
@Data
public class MailConfig {

    /**
     * SMTP服务器的登录用户。
     */
    @Value("${universe.mail.username}")
    private String username;

    /**
     * SMTP服务器的登录密码。
     */
    @Value("${universe.mail.password}")
    private String password;

    /**
     * SMTP服务器主机。例如,smtp.example.com.
     */
    @Value("${universe.mail.host}")
    private String host;

    /**
     * SMTP服务器端口。
     */
    @Value("${universe.mail.port}")
    private Integer port;

    /**
     * 如果为真，则尝试使用AUTH命令对用户进行身份验证。默认值为false。
     */
    @Value("${universe.mail.properties.mail.smtp.auth}")
    private String smtpAuth;

    /**
     * 指定的端口连接到在使用指定的套接字工厂。如果没有设置,将使用默认端口456
     */
    @Value("${universe.mail.properties.mail.smtp.socketFactory.port}")
    private String socketFactoryPort;

    /**
     * 指定实现javax.net.SocketFactory接口的类的名称,
     * 这个类将被用于创建SMTP的套接字
     */
    @Value("${universe.mail.properties.mail.smtp.socketFactory.class}")
    private String socketFactoryClass;

    /**
     * 如果设置为true,未能创建一个套接字使用指定的套接字
     * 工厂类将导致使用java.net.Socket创建的套接字类,
     * 默认值为true
     */
    @Value("${universe.mail.properties.mail.smtp.socketFactory.fallback}")
    private String socketFactoryFallback;

    /**
     * 使用 STARTTLS安全连接，STARTTLS是对纯文本通信协议的扩展。
     */
    @Value("${universe.mail.properties.mail.smtp.starttls.enable}")
    private String starttlsEnable;

    /**
     * 如果为真，则需要使用STARTTLS命令。如果服务器不支持STARTTLS命
     * 令，或者该命令失败，则connect方法将失败。默认值为false。
     */
    @Value("${universe.mail.properties.mail.smtp.starttls.required}")
    private String starttlsRequired;

    /**
     * SMTP全称为Simple Mail Transfer Protocol（简单邮件传输协议），
     * 它是一组用于从源地址到目的地址传输邮件的规范，通过它来控制邮件的中转
     * 方式。SMTP认证要求必须提供账号和密码才能登陆服务器，其设计目的在于
     * 避免用户受到垃圾邮件的侵扰。
     */
    private String protocol = "smtp";

    /**
     * 编码格式 默认为UTF-8。
     */
    private Charset defaultEncoding;

    /**
     * 会话JNDI名称。设置时，优先于其他会话设置。
     */
    private String jndiName;

    private static final Charset DEFAULT_CHARSET;

    public MailConfig() {
        this.defaultEncoding = DEFAULT_CHARSET;
    }

    static {
        DEFAULT_CHARSET = StandardCharsets.UTF_8;
    }

}
